//! 身份证的各种编码和行政区划编码
//!
//!

use std::collections::HashMap;

/// 身份证签名编码
///
/// 签名编码和下面的验证字符是按照索引对应
pub const SIGN_CODES: [i32; 17] = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];

/// 身份证最后一位的验证字符
///
/// X对应的是10
pub const VERIFY_CODES: [char; 11] = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

/// 地域编码，获取子全国行政区划代码
///
/// 非地级市，县，区等，只是以字符串数组的形式存在，不提供地名的匹配
///
/// 如果需要到县级随机，需要自己填入县级编码
pub const REGION_CODES: [&'static str; 2750] = [
    "110101", "110102", "110105", "110106", "110107", "110108", "110109", "110111", "110112",
    "110113", "110114", "110115", "110116", "110117", "110118", "110119", "120101", "120102",
    "120103", "120104", "120105", "120106", "120110", "120111", "120112", "120113", "120114",
    "120115", "120116", "120117", "120118", "120119", "130102", "130104", "130105", "130107",
    "130108", "130109", "130110", "130111", "130121", "130123", "130125", "130126", "130127",
    "130128", "130129", "130130", "130131", "130132", "130133", "130181", "130183", "130184",
    "130202", "130203", "130204", "130205", "130207", "130208", "130209", "130224", "130225",
    "130227", "130229", "130281", "130283", "130284", "130302", "130303", "130304", "130306",
    "130321", "130322", "130324", "130402", "130403", "130404", "130406", "130407", "130408",
    "130423", "130424", "130425", "130426", "130427", "130430", "130431", "130432", "130433",
    "130434", "130435", "130481", "130502", "130503", "130521", "130522", "130523", "130524",
    "130525", "130526", "130527", "130528", "130529", "130530", "130531", "130532", "130533",
    "130534", "130535", "130581", "130582", "130602", "130606", "130607", "130608", "130609",
    "130623", "130624", "130626", "130627", "130628", "130629", "130630", "130631", "130632",
    "130633", "130634", "130635", "130636", "130637", "130638", "130681", "130682", "130683",
    "130684", "130702", "130703", "130705", "130706", "130708", "130709", "130722", "130723",
    "130724", "130725", "130726", "130727", "130728", "130730", "130731", "130732", "130802",
    "130803", "130804", "130821", "130822", "130824", "130825", "130826", "130827", "130828",
    "130881", "130902", "130903", "130921", "130922", "130923", "130924", "130925", "130926",
    "130927", "130928", "130929", "130930", "130981", "130982", "130983", "130984", "131022",
    "131023", "131024", "131025", "131026", "131028", "131081", "131082", "131102", "131103",
    "131121", "131122", "131123", "131124", "131125", "131126", "131127", "131128", "131182",
    "140105", "140106", "140107", "140108", "140109", "140110", "140121", "140122", "140123",
    "140181", "140212", "140213", "140214", "140215", "140221", "140222", "140223", "140224",
    "140225", "140226", "140302", "140303", "140311", "140321", "140322", "140403", "140404",
    "140405", "140406", "140423", "140425", "140426", "140427", "140428", "140429", "140430",
    "140431", "140502", "140521", "140522", "140524", "140525", "140581", "140602", "140603",
    "140621", "140622", "140623", "140681", "140702", "140703", "140721", "140722", "140723",
    "140724", "140725", "140727", "140728", "140729", "140781", "140802", "140821", "140822",
    "140823", "140824", "140825", "140826", "140827", "140828", "140829", "140830", "140881",
    "140882", "140902", "140921", "140922", "140923", "140924", "140925", "140926", "140927",
    "140928", "140929", "140930", "140931", "140932", "140981", "141021", "141022", "141023",
    "141024", "141025", "141026", "141027", "141028", "141029", "141030", "141031", "141032",
    "141033", "141034", "141081", "141082", "141102", "141121", "141122", "141123", "141124",
    "141125", "141126", "141127", "141128", "141129", "141130", "141181", "141182", "150102",
    "150103", "150104", "150105", "150121", "150122", "150123", "150124", "150125", "150202",
    "150203", "150204", "150205", "150206", "150207", "150221", "150222", "150223", "150302",
    "150303", "150304", "150402", "150403", "150404", "150421", "150422", "150423", "150424",
    "150425", "150426", "150428", "150429", "150430", "150502", "150521", "150522", "150523",
    "150524", "150525", "150526", "150581", "150602", "150603", "150621", "150622", "150623",
    "150624", "150625", "150626", "150627", "150702", "150703", "150721", "150722", "150723",
    "150724", "150725", "150726", "150727", "150781", "150782", "150783", "150784", "150785",
    "150802", "150821", "150822", "150823", "150824", "150825", "150826", "150902", "150921",
    "150922", "150923", "150924", "150925", "150926", "150927", "150928", "150929", "150981",
    "152201", "152202", "152221", "152222", "152223", "152224", "152501", "152502", "152522",
    "152523", "152524", "152525", "152526", "152527", "152528", "152529", "152530", "152531",
    "152921", "152922", "152923", "210102", "210103", "210104", "210105", "210106", "210111",
    "210112", "210113", "210114", "210115", "210123", "210124", "210181", "210202", "210203",
    "210204", "210211", "210212", "210213", "210214", "210224", "210281", "210283", "210302",
    "210303", "210304", "210311", "210321", "210323", "210381", "210402", "210403", "210404",
    "210411", "210421", "210422", "210423", "210502", "210503", "210504", "210505", "210521",
    "210522", "210602", "210603", "210604", "210624", "210681", "210682", "210702", "210703",
    "210711", "210726", "210727", "210781", "210782", "210802", "210803", "210804", "210811",
    "210881", "210882", "210902", "210903", "210904", "210905", "210911", "210921", "210922",
    "211011", "211021", "211081", "211102", "211103", "211104", "211122", "211202", "211204",
    "211221", "211223", "211224", "211281", "211282", "211302", "211303", "211321", "211322",
    "211324", "211381", "211382", "211402", "211403", "211404", "211421", "211422", "211481",
    "220102", "220103", "220104", "220105", "220106", "220112", "220113", "220122", "220182",
    "220183", "220202", "220203", "220204", "220211", "220221", "220281", "220282", "220283",
    "220284", "220302", "220303", "220322", "220323", "220381", "220382", "220402", "220403",
    "220421", "220422", "220502", "220503", "220521", "220523", "220524", "220581", "220582",
    "220602", "220605", "220621", "220622", "220623", "220681", "220702", "220721", "220722",
    "220723", "220781", "220802", "220821", "220822", "220881", "220882", "222401", "222402",
    "222403", "222404", "222405", "222406", "222424", "222426", "230102", "230103", "230104",
    "230108", "230109", "230110", "230111", "230112", "230113", "230123", "230124", "230125",
    "230126", "230127", "230128", "230129", "230183", "230184", "230202", "230203", "230204",
    "230205", "230206", "230207", "230208", "230221", "230223", "230224", "230225", "230227",
    "230229", "230230", "230231", "230281", "230302", "230303", "230304", "230305", "230306",
    "230307", "230321", "230381", "230382", "230402", "230403", "230404", "230405", "230406",
    "230407", "230421", "230422", "230502", "230503", "230505", "230506", "230521", "230522",
    "230523", "230524", "230602", "230603", "230604", "230605", "230606", "230621", "230622",
    "230623", "230624", "230717", "230718", "230719", "230722", "230723", "230724", "230725",
    "230726", "230751", "230781", "230803", "230804", "230805", "230811", "230822", "230826",
    "230828", "230881", "230882", "230883", "230902", "230903", "230904", "230921", "231025",
    "231081", "231083", "231084", "231085", "231086", "231102", "231123", "231124", "231181",
    "231182", "231183", "231202", "231221", "231222", "231223", "231224", "231225", "231226",
    "231281", "231282", "231283", "232701", "232721", "232722", "310101", "310104", "310105",
    "310106", "310107", "310109", "310110", "310112", "310113", "310114", "310115", "310116",
    "310117", "310118", "310120", "310151", "320102", "320104", "320105", "320106", "320111",
    "320113", "320114", "320115", "320116", "320117", "320118", "320205", "320206", "320211",
    "320213", "320214", "320281", "320282", "320302", "320303", "320305", "320311", "320312",
    "320321", "320322", "320324", "320381", "320382", "320402", "320404", "320411", "320412",
    "320413", "320481", "320505", "320506", "320507", "320508", "320509", "320581", "320582",
    "320583", "320585", "320602", "320611", "320612", "320623", "320681", "320682", "320684",
    "320685", "320703", "320706", "320707", "320722", "320723", "320724", "320803", "320804",
    "320812", "320813", "320826", "320830", "320831", "320902", "320903", "320904", "320921",
    "320922", "320923", "320924", "320925", "320981", "321012", "321023", "321081", "321084",
    "321102", "321111", "321112", "321181", "321182", "321183", "321202", "321203", "321204",
    "321281", "321282", "321283", "321302", "321311", "321322", "321323", "321324", "330102",
    "330103", "330104", "330105", "330106", "330108", "330109", "330110", "330111", "330112",
    "330122", "330127", "330182", "330203", "330205", "330206", "330211", "330212", "330213",
    "330225", "330226", "330281", "330282", "330302", "330303", "330304", "330305", "330324",
    "330326", "330327", "330328", "330329", "330381", "330382", "330383", "330402", "330411",
    "330421", "330424", "330481", "330482", "330483", "330502", "330503", "330521", "330522",
    "330523", "330602", "330603", "330604", "330624", "330681", "330683", "330702", "330703",
    "330723", "330726", "330727", "330781", "330782", "330783", "330784", "330802", "330803",
    "330822", "330824", "330825", "330881", "330902", "330903", "330921", "330922", "331022",
    "331023", "331024", "331081", "331082", "331083", "331102", "331121", "331122", "331123",
    "331124", "331125", "331126", "331127", "331181", "340102", "340103", "340104", "340111",
    "340121", "340122", "340123", "340124", "340181", "340202", "340203", "340207", "340208",
    "340221", "340222", "340223", "340281", "340302", "340303", "340304", "340311", "340321",
    "340322", "340323", "340402", "340403", "340404", "340405", "340406", "340421", "340422",
    "340503", "340504", "340506", "340521", "340522", "340523", "340602", "340603", "340604",
    "340621", "340705", "340706", "340711", "340722", "340802", "340803", "340811", "340822",
    "340825", "340826", "340827", "340828", "340881", "340882", "341021", "341022", "341023",
    "341024", "341102", "341103", "341122", "341124", "341125", "341126", "341181", "341182",
    "341202", "341203", "341204", "341221", "341222", "341225", "341226", "341282", "341302",
    "341321", "341322", "341323", "341324", "341502", "341503", "341504", "341522", "341523",
    "341524", "341525", "341602", "341621", "341622", "341623", "341702", "341721", "341722",
    "341723", "341802", "341821", "341823", "341824", "341825", "341881", "341882", "350102",
    "350103", "350104", "350105", "350111", "350112", "350121", "350122", "350123", "350124",
    "350125", "350128", "350181", "350203", "350205", "350206", "350211", "350212", "350213",
    "350302", "350303", "350304", "350305", "350322", "350402", "350403", "350421", "350423",
    "350424", "350425", "350426", "350427", "350428", "350429", "350430", "350481", "350502",
    "350503", "350504", "350505", "350521", "350524", "350525", "350526", "350527", "350581",
    "350582", "350583", "350602", "350603", "350622", "350623", "350624", "350625", "350626",
    "350627", "350628", "350629", "350681", "350702", "350703", "350721", "350722", "350723",
    "350724", "350725", "350781", "350782", "350783", "350802", "350803", "350821", "350823",
    "350824", "350825", "350881", "350902", "350921", "350922", "350923", "350924", "350925",
    "350926", "350981", "350982", "360102", "360103", "360104", "360111", "360112", "360113",
    "360121", "360123", "360124", "360202", "360203", "360222", "360281", "360302", "360313",
    "360321", "360322", "360323", "360402", "360403", "360404", "360423", "360424", "360425",
    "360426", "360428", "360429", "360430", "360481", "360482", "360483", "360502", "360521",
    "360602", "360603", "360681", "360702", "360703", "360704", "360722", "360723", "360724",
    "360725", "360726", "360728", "360729", "360730", "360731", "360732", "360733", "360734",
    "360735", "360781", "360783", "360802", "360803", "360821", "360822", "360823", "360824",
    "360825", "360826", "360827", "360828", "360829", "360830", "360881", "360902", "360921",
    "360922", "360923", "360924", "360925", "360926", "360981", "360982", "360983", "361021",
    "361022", "361023", "361024", "361025", "361026", "361027", "361028", "361030", "361102",
    "361103", "361104", "361123", "361124", "361125", "361126", "361127", "361128", "361129",
    "361130", "361181", "370102", "370103", "370104", "370105", "370112", "370113", "370114",
    "370115", "370116", "370117", "370124", "370126", "370202", "370203", "370211", "370212",
    "370213", "370214", "370215", "370281", "370283", "370285", "370302", "370303", "370304",
    "370305", "370306", "370321", "370322", "370323", "370402", "370403", "370404", "370405",
    "370406", "370481", "370502", "370503", "370505", "370522", "370523", "370602", "370611",
    "370612", "370613", "370634", "370681", "370682", "370683", "370684", "370685", "370686",
    "370687", "370702", "370703", "370704", "370705", "370724", "370725", "370781", "370782",
    "370783", "370784", "370785", "370786", "370811", "370812", "370826", "370827", "370828",
    "370829", "370830", "370831", "370832", "370881", "370883", "370902", "370911", "370921",
    "370923", "370982", "370983", "371082", "371083", "371102", "371103", "371121", "371122",
    "371302", "371311", "371312", "371321", "371322", "371323", "371324", "371325", "371326",
    "371327", "371328", "371329", "371402", "371403", "371422", "371423", "371424", "371425",
    "371426", "371427", "371428", "371481", "371482", "371502", "371503", "371521", "371522",
    "371524", "371525", "371526", "371581", "371602", "371603", "371621", "371622", "371623",
    "371625", "371681", "371702", "371703", "371721", "371722", "371723", "371724", "371725",
    "371726", "371728", "410102", "410103", "410104", "410105", "410106", "410108", "410122",
    "410181", "410182", "410183", "410184", "410185", "410202", "410203", "410204", "410205",
    "410212", "410221", "410222", "410223", "410225", "410302", "410303", "410304", "410305",
    "410306", "410311", "410322", "410323", "410324", "410325", "410326", "410327", "410328",
    "410329", "410381", "410402", "410403", "410404", "410411", "410421", "410422", "410423",
    "410425", "410481", "410482", "410502", "410503", "410505", "410506", "410522", "410523",
    "410526", "410527", "410581", "410602", "410603", "410611", "410621", "410622", "410702",
    "410703", "410704", "410711", "410721", "410724", "410725", "410726", "410727", "410781",
    "410782", "410783", "410802", "410803", "410804", "410811", "410821", "410822", "410823",
    "410825", "410882", "410883", "410902", "410922", "410923", "410926", "410927", "410928",
    "411024", "411025", "411081", "411082", "411102", "411103", "411104", "411121", "411122",
    "411202", "411203", "411221", "411224", "411281", "411282", "411302", "411303", "411321",
    "411322", "411323", "411324", "411325", "411326", "411327", "411328", "411329", "411330",
    "411381", "411402", "411403", "411421", "411422", "411423", "411424", "411425", "411426",
    "411481", "411502", "411503", "411521", "411522", "411523", "411524", "411525", "411526",
    "411527", "411528", "411602", "411603", "411621", "411622", "411623", "411624", "411625",
    "411627", "411628", "411681", "411702", "411721", "411722", "411723", "411724", "411725",
    "411726", "411727", "411728", "411729", "420102", "420103", "420104", "420105", "420106",
    "420107", "420111", "420112", "420113", "420114", "420115", "420116", "420117", "420202",
    "420203", "420204", "420205", "420222", "420281", "420302", "420303", "420304", "420322",
    "420323", "420324", "420325", "420381", "420502", "420503", "420504", "420505", "420506",
    "420525", "420526", "420527", "420528", "420529", "420581", "420582", "420583", "420602",
    "420606", "420607", "420624", "420625", "420626", "420682", "420683", "420684", "420702",
    "420703", "420704", "420802", "420804", "420822", "420881", "420882", "420902", "420921",
    "420922", "420923", "420981", "420982", "420984", "421022", "421023", "421024", "421081",
    "421083", "421087", "421102", "421121", "421122", "421123", "421124", "421125", "421126",
    "421127", "421181", "421182", "421202", "421221", "421222", "421223", "421224", "421281",
    "421303", "421321", "421381", "422801", "422802", "422822", "422823", "422825", "422826",
    "422827", "422828", "429021", "430102", "430103", "430104", "430105", "430111", "430112",
    "430121", "430181", "430182", "430202", "430203", "430204", "430211", "430212", "430223",
    "430224", "430225", "430281", "430302", "430304", "430321", "430381", "430382", "430405",
    "430406", "430407", "430408", "430412", "430421", "430422", "430423", "430424", "430426",
    "430481", "430482", "430502", "430503", "430511", "430522", "430523", "430524", "430525",
    "430527", "430528", "430529", "430581", "430582", "430602", "430603", "430611", "430621",
    "430623", "430624", "430626", "430681", "430682", "430702", "430703", "430721", "430722",
    "430723", "430724", "430725", "430726", "430781", "430802", "430811", "430821", "430822",
    "430902", "430903", "430921", "430922", "430923", "430981", "431021", "431022", "431023",
    "431024", "431025", "431026", "431027", "431028", "431081", "431102", "431103", "431121",
    "431122", "431123", "431124", "431125", "431126", "431127", "431128", "431129", "431202",
    "431221", "431222", "431223", "431224", "431225", "431226", "431227", "431228", "431229",
    "431230", "431281", "431302", "431321", "431322", "431381", "431382", "433101", "433122",
    "433123", "433124", "433125", "433126", "433127", "433130", "440103", "440104", "440105",
    "440106", "440111", "440112", "440113", "440114", "440115", "440117", "440118", "440203",
    "440204", "440205", "440222", "440224", "440229", "440232", "440233", "440281", "440282",
    "440303", "440304", "440305", "440306", "440307", "440308", "440309", "440310", "440311",
    "440402", "440403", "440404", "440507", "440511", "440512", "440513", "440514", "440515",
    "440523", "440604", "440605", "440606", "440607", "440608", "440703", "440704", "440705",
    "440781", "440783", "440784", "440785", "440802", "440803", "440804", "440811", "440823",
    "440825", "440881", "440882", "440883", "440902", "440904", "440981", "440982", "440983",
    "441202", "441203", "441204", "441223", "441224", "441225", "441226", "441284", "441302",
    "441303", "441322", "441323", "441324", "441402", "441403", "441422", "441423", "441424",
    "441426", "441427", "441481", "441502", "441521", "441523", "441581", "441602", "441621",
    "441622", "441623", "441624", "441625", "441702", "441704", "441721", "441781", "441802",
    "441803", "441821", "441823", "441825", "441826", "441881", "441882", "445102", "445103",
    "445122", "445202", "445203", "445222", "445224", "445281", "445302", "445303", "445321",
    "445322", "445381", "450102", "450103", "450105", "450107", "450108", "450109", "450110",
    "450123", "450124", "450125", "450126", "450127", "450202", "450203", "450204", "450205",
    "450206", "450222", "450223", "450224", "450225", "450226", "450302", "450303", "450304",
    "450305", "450311", "450312", "450321", "450323", "450324", "450325", "450326", "450327",
    "450328", "450329", "450330", "450381", "450332", "450403", "450405", "450406", "450421",
    "450422", "450423", "450481", "450502", "450503", "450512", "450521", "450602", "450603",
    "450621", "450681", "450702", "450703", "450721", "450722", "450802", "450803", "450804",
    "450821", "450881", "450902", "450903", "450921", "450922", "450923", "450924", "450981",
    "451022", "451024", "451026", "451027", "451028", "451029", "451030", "451031", "451081",
    "451082", "451102", "451103", "451121", "451122", "451123", "451202", "451203", "451221",
    "451222", "451223", "451224", "451225", "451226", "451227", "451228", "451229", "451302",
    "451321", "451322", "451323", "451324", "451381", "451402", "451421", "451422", "451423",
    "451424", "451425", "451481", "460105", "460106", "460107", "460108", "460202", "460203",
    "460204", "460205", "469021", "469022", "469023", "469024", "469025", "469026", "469027",
    "469028", "469029", "469030", "510104", "510105", "510106", "510107", "510108", "510112",
    "510113", "510114", "510115", "510116", "510117", "510118", "510121", "510129", "510131",
    "510181", "510182", "510183", "510184", "510185", "510302", "510303", "510304", "510311",
    "510321", "510322", "510402", "510403", "510411", "510421", "510422", "510502", "510503",
    "510504", "510521", "510522", "510524", "510525", "510603", "510604", "510623", "510681",
    "510682", "510683", "510703", "510704", "510705", "510722", "510723", "510725", "510726",
    "510727", "510781", "510802", "510811", "510812", "510821", "510822", "510823", "510824",
    "510903", "510904", "510921", "510923", "510981", "511011", "511024", "511025", "511083",
    "511102", "511111", "511112", "511113", "511123", "511124", "511126", "511129", "511132",
    "511133", "511181", "511302", "511303", "511304", "511321", "511322", "511323", "511324",
    "511325", "511381", "511402", "511403", "511421", "511423", "511424", "511425", "511502",
    "511503", "511504", "511523", "511524", "511525", "511526", "511527", "511528", "511529",
    "511602", "511603", "511621", "511622", "511623", "511681", "511702", "511703", "511722",
    "511723", "511724", "511725", "511781", "511802", "511803", "511822", "511823", "511824",
    "511825", "511826", "511827", "511902", "511903", "511921", "511922", "511923", "512021",
    "512022", "513201", "513221", "513222", "513223", "513224", "513225", "513226", "513227",
    "513228", "513230", "513231", "513232", "513233", "513301", "513322", "513323", "513324",
    "513325", "513326", "513327", "513328", "513329", "513330", "513331", "513332", "513333",
    "513334", "513335", "513336", "513337", "513338", "513401", "513422", "513423", "513424",
    "513425", "513426", "513427", "513428", "513429", "513430", "513431", "513432", "513433",
    "513434", "513435", "513436", "513437", "520102", "520103", "520111", "520112", "520113",
    "520115", "520121", "520122", "520123", "520181", "520201", "520203", "520221", "520281",
    "520302", "520303", "520304", "520322", "520323", "520324", "520325", "520326", "520327",
    "520328", "520329", "520330", "520381", "520382", "520402", "520403", "520422", "520423",
    "520424", "520425", "520502", "520521", "520522", "520523", "520524", "520525", "520526",
    "520527", "520602", "520603", "520621", "520622", "520623", "520624", "520625", "520626",
    "520627", "520628", "522301", "522302", "522323", "522324", "522325", "522326", "522327",
    "522328", "522601", "522622", "522623", "522624", "522625", "522626", "522627", "522628",
    "522629", "522630", "522631", "522632", "522633", "522634", "522635", "522636", "522701",
    "522702", "522722", "522723", "522725", "522726", "522727", "522728", "522729", "522730",
    "522731", "522732", "530102", "530103", "530111", "530112", "530113", "530114", "530115",
    "530124", "530125", "530126", "530127", "530128", "530129", "530181", "530302", "530303",
    "530304", "530322", "530323", "530324", "530325", "530326", "530381", "530402", "530403",
    "530423", "530424", "530425", "530426", "530427", "530428", "530481", "530502", "530521",
    "530523", "530524", "530581", "530602", "530621", "530622", "530623", "530624", "530625",
    "530626", "530627", "530628", "530629", "530681", "530702", "530721", "530722", "530723",
    "530724", "530802", "530821", "530822", "530823", "530824", "530825", "530826", "530827",
    "530828", "530829", "530902", "530921", "530922", "530923", "530924", "530925", "530926",
    "530927", "532301", "532322", "532323", "532324", "532325", "532326", "532327", "532328",
    "532329", "532331", "532501", "532502", "532503", "532504", "532523", "532524", "532525",
    "532527", "532528", "532529", "532530", "532531", "532532", "532601", "532622", "532623",
    "532624", "532625", "532626", "532627", "532628", "532801", "532822", "532823", "532901",
    "532922", "532923", "532924", "532925", "532926", "532927", "532928", "532929", "532930",
    "532931", "532932", "533102", "533103", "533122", "533123", "533124", "533301", "533323",
    "533324", "533325", "533401", "533422", "533423", "540102", "540103", "540104", "540121",
    "540122", "540123", "540124", "540127", "540202", "540221", "540222", "540223", "540224",
    "540225", "540226", "540227", "540228", "540229", "540230", "540231", "540232", "540233",
    "540234", "540235", "540236", "540237", "540302", "540321", "540322", "540323", "540324",
    "540325", "540326", "540327", "540328", "540329", "540330", "540402", "540421", "540422",
    "540423", "540424", "540425", "540426", "540502", "540521", "540522", "540523", "540524",
    "540525", "540526", "540527", "540528", "540529", "540530", "540531", "540602", "540621",
    "540622", "540623", "540624", "540625", "540626", "540627", "540628", "540629", "540630",
    "542521", "542522", "542523", "542524", "542525", "542526", "542527", "610102", "610103",
    "610104", "610111", "610112", "610113", "610114", "610115", "610116", "610117", "610118",
    "610122", "610124", "610202", "610203", "610204", "610222", "610302", "610303", "610304",
    "610322", "610323", "610324", "610326", "610327", "610328", "610329", "610330", "610331",
    "610402", "610403", "610404", "610422", "610423", "610424", "610425", "610426", "610428",
    "610429", "610430", "610431", "610481", "610482", "610502", "610503", "610522", "610523",
    "610524", "610525", "610526", "610527", "610528", "610581", "610582", "610602", "610603",
    "610621", "610622", "610625", "610626", "610627", "610628", "610629", "610630", "610631",
    "610632", "610681", "610702", "610703", "610722", "610723", "610724", "610725", "610726",
    "610727", "610728", "610729", "610730", "610802", "610803", "610822", "610824", "610825",
    "610826", "610827", "610828", "610829", "610830", "610831", "610881", "610902", "610921",
    "610922", "610923", "610924", "610925", "610926", "610927", "610928", "610929", "611021",
    "611022", "611023", "611024", "611025", "611026", "620102", "620103", "620104", "620105",
    "620111", "620121", "620122", "620123", "620302", "620321", "620402", "620403", "620421",
    "620422", "620423", "620502", "620503", "620521", "620522", "620523", "620524", "620525",
    "620602", "620621", "620622", "620623", "620702", "620721", "620722", "620723", "620724",
    "620725", "620802", "620821", "620822", "620823", "620825", "620826", "620881", "620902",
    "620921", "620922", "620923", "620924", "620981", "620982", "621021", "621022", "621023",
    "621024", "621025", "621026", "621027", "621102", "621121", "621122", "621123", "621124",
    "621125", "621126", "621202", "621221", "621222", "621223", "621224", "621225", "621226",
    "621227", "621228", "622901", "622921", "622922", "622923", "622924", "622925", "622926",
    "622927", "623021", "623022", "623023", "623024", "623025", "623026", "623027", "630102",
    "630103", "630104", "630105", "630106", "630121", "630123", "630202", "630203", "630222",
    "630223", "630224", "630225", "632221", "632222", "632223", "632224", "632321", "632322",
    "632323", "632324", "632521", "632522", "632523", "632524", "632525", "632621", "632622",
    "632623", "632624", "632625", "632626", "632701", "632722", "632723", "632724", "632725",
    "632726", "632801", "632802", "632803", "632821", "632822", "632823", "640104", "640105",
    "640106", "640121", "640122", "640181", "640202", "640205", "640221", "640302", "640303",
    "640323", "640324", "640381", "640402", "640422", "640423", "640424", "640425", "640502",
    "640521", "640522", "650102", "650103", "650104", "650105", "650106", "650107", "650109",
    "650121", "650202", "650203", "650204", "650205", "650402", "650421", "650422", "650502",
    "650521", "650522", "652301", "652302", "652323", "652324", "652325", "652327", "652328",
    "652701", "652702", "652722", "652723", "652801", "652822", "652823", "652824", "652825",
    "652826", "652827", "652828", "652829", "652901", "652902", "652922", "652924", "652925",
    "652926", "652927", "652928", "652929", "653022", "653023", "653024", "653101", "653121",
    "653122", "653123", "653124", "653125", "653126", "653127", "653128", "653129", "653130",
    "653131", "653201", "653221", "653222", "653223", "653224", "653225", "653226", "653227",
    "654021", "654022", "654023", "654024", "654025", "654026", "654027", "654028", "654201",
    "654202", "654221", "654223", "654224", "654225", "654226", "654301", "654321", "654322",
    "654323", "654324", "654325", "654326", "659010",
];

/// 省，直辖市，地级市代码
///
/// 在处理 **LOC_CODES** 的时候把末位的 **0** 移除了，以方便匹配 eg:
///
/// **110000** 的北京市变成了 **11**
///
/// **610100** 的西安市变成了 **6101**
///
/// 数据格式为
/// ```
/// [
///     ("北京市", "11"),
///     ("西安市", "6101")
/// ]
/// ```
pub const LOC_CODES: [(&str, &str); 367] = [
    ("北京市", "11"),
    ("天津市", "12"),
    ("河北省", "13"),
    ("石家庄市", "1301"),
    ("唐山市", "1302"),
    ("秦皇岛市", "1303"),
    ("邯郸市", "1304"),
    ("邢台市", "1305"),
    ("保定市", "1306"),
    ("张家口市", "1307"),
    ("承德市", "1308"),
    ("沧州市", "1309"),
    ("廊坊市", "1310"),
    ("衡水市", "1311"),
    ("山西省", "14"),
    ("太原市", "1401"),
    ("大同市", "1402"),
    ("阳泉市", "1403"),
    ("长治市", "1404"),
    ("晋城市", "1405"),
    ("朔州市", "1406"),
    ("晋中市", "1407"),
    ("运城市", "1408"),
    ("忻州市", "1409"),
    ("临汾市", "1410"),
    ("吕梁市", "1411"),
    ("内蒙古自治区", "15"),
    ("呼和浩特市", "1501"),
    ("包头市", "1502"),
    ("乌海市", "1503"),
    ("赤峰市", "1504"),
    ("通辽市", "1505"),
    ("鄂尔多斯市", "1506"),
    ("呼伦贝尔市", "1507"),
    ("巴彦淖尔市", "1508"),
    ("乌兰察布市", "1509"),
    ("兴安盟", "1522"),
    ("锡林郭勒盟", "1525"),
    ("阿拉善盟", "1529"),
    ("辽宁省", "21"),
    ("沈阳市", "2101"),
    ("大连市", "2102"),
    ("鞍山市", "2103"),
    ("抚顺市", "2104"),
    ("本溪市", "2105"),
    ("丹东市", "2106"),
    ("锦州市", "2107"),
    ("营口市", "2108"),
    ("阜新市", "2109"),
    ("辽阳市", "2110"),
    ("盘锦市", "2111"),
    ("铁岭市", "2112"),
    ("朝阳市", "2113"),
    ("葫芦岛市", "2114"),
    ("吉林省", "22"),
    ("长春市", "2201"),
    ("吉林市", "2202"),
    ("四平市", "2203"),
    ("辽源市", "2204"),
    ("通化市", "2205"),
    ("白山市", "2206"),
    ("松原市", "2207"),
    ("白城市", "2208"),
    ("延边朝鲜族自治州", "2224"),
    ("黑龙江省", "23"),
    ("哈尔滨市", "2301"),
    ("齐齐哈尔市", "2302"),
    ("鸡西市", "2303"),
    ("鹤岗市", "2304"),
    ("双鸭山市", "2305"),
    ("大庆市", "2306"),
    ("伊春市", "2307"),
    ("佳木斯市", "2308"),
    ("七台河市", "2309"),
    ("牡丹江市", "2310"),
    ("黑河市", "2311"),
    ("绥化市", "2312"),
    ("大兴安岭地区", "2327"),
    ("上海市", "31"),
    ("江苏省", "32"),
    ("南京市", "3201"),
    ("无锡市", "3202"),
    ("徐州市", "3203"),
    ("常州市", "3204"),
    ("苏州市", "3205"),
    ("南通市", "3206"),
    ("连云港市", "3207"),
    ("淮安市", "3208"),
    ("盐城市", "3209"),
    ("扬州市", "3210"),
    ("镇江市", "3211"),
    ("泰州市", "3212"),
    ("宿迁市", "3213"),
    ("浙江省", "33"),
    ("杭州市", "3301"),
    ("宁波市", "3302"),
    ("温州市", "3303"),
    ("嘉兴市", "3304"),
    ("湖州市", "3305"),
    ("绍兴市", "3306"),
    ("金华市", "3307"),
    ("衢州市", "3308"),
    ("舟山市", "3309"),
    ("台州市", "3310"),
    ("丽水市", "3311"),
    ("安徽省", "34"),
    ("合肥市", "3401"),
    ("芜湖市", "3402"),
    ("蚌埠市", "3403"),
    ("淮南市", "3404"),
    ("马鞍山市", "3405"),
    ("淮北市", "3406"),
    ("铜陵市", "3407"),
    ("安庆市", "3408"),
    ("黄山市", "3410"),
    ("滁州市", "3411"),
    ("阜阳市", "3412"),
    ("宿州市", "3413"),
    ("六安市", "3415"),
    ("亳州市", "3416"),
    ("池州市", "3417"),
    ("宣城市", "3418"),
    ("福建省", "35"),
    ("福州市", "3501"),
    ("厦门市", "3502"),
    ("莆田市", "3503"),
    ("三明市", "3504"),
    ("泉州市", "3505"),
    ("漳州市", "3506"),
    ("南平市", "3507"),
    ("龙岩市", "3508"),
    ("宁德市", "3509"),
    ("江西省", "36"),
    ("南昌市", "3601"),
    ("景德镇市", "3602"),
    ("萍乡市", "3603"),
    ("九江市", "3604"),
    ("新余市", "3605"),
    ("鹰潭市", "3606"),
    ("赣州市", "3607"),
    ("吉安市", "3608"),
    ("宜春市", "3609"),
    ("抚州市", "3610"),
    ("上饶市", "3611"),
    ("山东省", "37"),
    ("济南市", "3701"),
    ("青岛市", "3702"),
    ("淄博市", "3703"),
    ("枣庄市", "3704"),
    ("东营市", "3705"),
    ("烟台市", "3706"),
    ("潍坊市", "3707"),
    ("济宁市", "3708"),
    ("泰安市", "3709"),
    ("威海市", "3710"),
    ("日照市", "3711"),
    ("临沂市", "3713"),
    ("德州市", "3714"),
    ("聊城市", "3715"),
    ("滨州市", "3716"),
    ("菏泽市", "3717"),
    ("河南省", "41"),
    ("郑州市", "4101"),
    ("开封市", "4102"),
    ("洛阳市", "4103"),
    ("平顶山市", "4104"),
    ("安阳市", "4105"),
    ("鹤壁市", "4106"),
    ("新乡市", "4107"),
    ("焦作市", "4108"),
    ("濮阳市", "4109"),
    ("许昌市", "4110"),
    ("漯河市", "4111"),
    ("三门峡市", "4112"),
    ("南阳市", "4113"),
    ("商丘市", "4114"),
    ("信阳市", "4115"),
    ("周口市", "4116"),
    ("驻马店市", "4117"),
    ("湖北省", "42"),
    ("武汉市", "4201"),
    ("黄石市", "4202"),
    ("十堰市", "4203"),
    ("宜昌市", "4205"),
    ("襄阳市", "4206"),
    ("鄂州市", "4207"),
    ("荆门市", "4208"),
    ("孝感市", "4209"),
    ("荆州市", "4210"),
    ("黄冈市", "4211"),
    ("咸宁市", "4212"),
    ("随州市", "4213"),
    ("恩施土家族苗族自治州", "4228"),
    ("湖南省", "43"),
    ("长沙市", "4301"),
    ("株洲市", "4302"),
    ("湘潭市", "4303"),
    ("衡阳市", "4304"),
    ("邵阳市", "4305"),
    ("岳阳市", "4306"),
    ("常德市", "4307"),
    ("张家界市", "4308"),
    ("益阳市", "4309"),
    ("郴州市", "4310"),
    ("永州市", "4311"),
    ("怀化市", "4312"),
    ("娄底市", "4313"),
    ("湘西土家族苗族自治州", "4331"),
    ("广东省", "44"),
    ("广州市", "4401"),
    ("韶关市", "4402"),
    ("深圳市", "4403"),
    ("珠海市", "4404"),
    ("汕头市", "4405"),
    ("佛山市", "4406"),
    ("江门市", "4407"),
    ("湛江市", "4408"),
    ("茂名市", "4409"),
    ("肇庆市", "4412"),
    ("惠州市", "4413"),
    ("梅州市", "4414"),
    ("汕尾市", "4415"),
    ("河源市", "4416"),
    ("阳江市", "4417"),
    ("清远市", "4418"),
    ("东莞市", "4419"),
    ("中山市", "4420"),
    ("潮州市", "4451"),
    ("揭阳市", "4452"),
    ("云浮市", "4453"),
    ("广西壮族自治区", "45"),
    ("南宁市", "4501"),
    ("柳州市", "4502"),
    ("桂林市", "4503"),
    ("梧州市", "4504"),
    ("北海市", "4505"),
    ("防城港市", "4506"),
    ("钦州市", "4507"),
    ("贵港市", "4508"),
    ("玉林市", "4509"),
    ("百色市", "4510"),
    ("贺州市", "4511"),
    ("河池市", "4512"),
    ("来宾市", "4513"),
    ("崇左市", "4514"),
    ("海南省", "46"),
    ("海口市", "4601"),
    ("三亚市", "4602"),
    ("三沙市", "4603"),
    ("儋州市", "4604"),
    ("重庆市", "50"),
    ("四川省", "51"),
    ("成都市", "5101"),
    ("自贡市", "5103"),
    ("攀枝花市", "5104"),
    ("泸州市", "5105"),
    ("德阳市", "5106"),
    ("绵阳市", "5107"),
    ("广元市", "5108"),
    ("遂宁市", "5109"),
    ("内江市", "5110"),
    ("乐山市", "5111"),
    ("南充市", "5113"),
    ("眉山市", "5114"),
    ("宜宾市", "5115"),
    ("广安市", "5116"),
    ("达州市", "5117"),
    ("雅安市", "5118"),
    ("巴中市", "5119"),
    ("资阳市", "5120"),
    ("阿坝藏族羌族自治州", "5132"),
    ("甘孜藏族自治州", "5133"),
    ("凉山彝族自治州", "5134"),
    ("贵州省", "52"),
    ("贵阳市", "5201"),
    ("六盘水市", "5202"),
    ("遵义市", "5203"),
    ("安顺市", "5204"),
    ("毕节市", "5205"),
    ("铜仁市", "5206"),
    ("黔西南布依族苗族自治州", "5223"),
    ("黔东南苗族侗族自治州", "5226"),
    ("黔南布依族苗族自治州", "5227"),
    ("云南省", "53"),
    ("昆明市", "5301"),
    ("曲靖市", "5303"),
    ("玉溪市", "5304"),
    ("保山市", "5305"),
    ("昭通市", "5306"),
    ("丽江市", "5307"),
    ("普洱市", "5308"),
    ("临沧市", "5309"),
    ("楚雄彝族自治州", "5323"),
    ("红河哈尼族彝族自治州", "5325"),
    ("文山壮族苗族自治州", "5326"),
    ("西双版纳傣族自治州", "5328"),
    ("大理白族自治州", "5329"),
    ("德宏傣族景颇族自治州", "5331"),
    ("怒江傈僳族自治州", "5333"),
    ("迪庆藏族自治州", "5334"),
    ("西藏自治区", "54"),
    ("拉萨市", "5401"),
    ("日喀则市", "5402"),
    ("昌都市", "5403"),
    ("林芝市", "5404"),
    ("山南市", "5405"),
    ("那曲市", "5406"),
    ("阿里地区", "5425"),
    ("陕西省", "61"),
    ("西安市", "6101"),
    ("铜川市", "6102"),
    ("宝鸡市", "6103"),
    ("咸阳市", "6104"),
    ("渭南市", "6105"),
    ("延安市", "6106"),
    ("汉中市", "6107"),
    ("榆林市", "6108"),
    ("安康市", "6109"),
    ("商洛市", "6110"),
    ("甘肃省", "62"),
    ("兰州市", "6201"),
    ("嘉峪关市", "6202"),
    ("金昌市", "6203"),
    ("白银市", "6204"),
    ("天水市", "6205"),
    ("武威市", "6206"),
    ("张掖市", "6207"),
    ("平凉市", "6208"),
    ("酒泉市", "6209"),
    ("庆阳市", "6210"),
    ("定西市", "6211"),
    ("陇南市", "6212"),
    ("临夏回族自治州", "6229"),
    ("甘南藏族自治州", "6230"),
    ("青海省", "63"),
    ("西宁市", "6301"),
    ("海东市", "6302"),
    ("海北藏族自治州", "6322"),
    ("黄南藏族自治州", "6323"),
    ("海南藏族自治州", "6325"),
    ("果洛藏族自治州", "6326"),
    ("玉树藏族自治州", "6327"),
    ("海西蒙古族藏族自治州", "6328"),
    ("宁夏回族自治区", "64"),
    ("银川市", "6401"),
    ("石嘴山市", "6402"),
    ("吴忠市", "6403"),
    ("固原市", "6404"),
    ("中卫市", "6405"),
    ("新疆维吾尔自治区", "65"),
    ("乌鲁木齐市", "6501"),
    ("克拉玛依市", "6502"),
    ("吐鲁番市", "6504"),
    ("哈密市", "6505"),
    ("昌吉回族自治州", "6523"),
    ("博尔塔拉蒙古自治州", "6527"),
    ("巴音郭楞蒙古自治州", "6528"),
    ("阿克苏地区", "6529"),
    ("克孜勒苏柯尔克孜自治州", "6530"),
    ("喀什地区", "6531"),
    ("和田地区", "6532"),
    ("伊犁哈萨克自治州", "6540"),
    ("塔城地区", "6542"),
    ("阿勒泰地区", "6543"),
    ("台湾省", "71"),
    ("香港特别行政区", "81"),
    ("澳门特别行政", "82"),
];

/// 根据省市名称获取省市的代码
///
/// 传入的是省市的名称，返回的是编码
///
///
pub fn get_loc_code(loc: &str) -> Result<String, String> {
    let loc_map = LOC_CODES.iter().cloned().collect::<HashMap<&str, &str>>();

    match loc_map.get(loc) {
        Some(l) => Ok(l.to_string()),
        None => Err(format!("错误的地域名称：{}", loc)),
    }
}
